package com.apanal.qlife.sys.dao;

import java.util.List;
import java.util.Set;

import org.apache.ibatis.annotations.Param;

import com.apanal.qlife.common.page.Page;
import com.apanal.qlife.sys.model.Resource;

/**
 * 资源数据持久层接口
 * 
 * 
 * @author shuliangxing
 * 
 * @date 2015-11-2下午5:04:59
 */
public interface ResourceMapper {

	/**
	 * 根据id删除
	 * 
	 * @param resId
	 * @return
	 */
	int deleteByPrimaryKey(Long resId);

	/**
	 * 新增
	 * 
	 * @param record
	 * @return
	 */
	int insert(Resource record);

	/**
	 * 非空字段新增
	 * 
	 * @param record
	 * @return
	 */
	int insertSelective(Resource record);

	/**
	 * 根据id查询
	 * 
	 * @param resId
	 * @return
	 */
	Resource selectByPrimaryKey(Long resId);

	/**
	 * 根据id更新非空字段
	 * 
	 * @param record
	 * @return
	 */
	int updateByPrimaryKeySelective(Resource record);

	/**
	 * 根据id更新
	 * 
	 * @param record
	 * @return
	 */
	int updateByPrimaryKey(Resource record);

	/* 分割线 */

	/**
	 * 根据条件查询
	 * 
	 * @return
	 */
	List<Resource> select(Resource record);

	/**
	 * 分页查询相关信息
	 * 
	 * @param entity
	 * @param page
	 * @return
	 */
	List<Resource> selectForPage(@Param(value = "e") Resource entity,
			@Param(value = "p") Page page);

	/**
	 * 查询总记录数
	 * 
	 * @param entity
	 * @param page
	 * @return
	 */
	int selectForPageCount(@Param(value = "e") Resource entity,
			@Param(value = "p") Page page);

	/**
	 * 根据角色id查询资源集合
	 * 
	 * @param rolId
	 * @return
	 */
	List<Resource> selectByRoleId(Long rolId);

	/**
	 * 根据群组id查询资源集合
	 * 
	 * @param groId
	 * @return
	 */
	List<Resource> selectByGroId(Long groId);

	/**
	 * 根据用户名查询权限集合
	 * 
	 * @param useId
	 * @return
	 */
	Set<String> findPermissionsByUserName(String useName);

	/**
	 * 查询所有菜单资源
	 * 
	 * @return
	 */
	List<Resource> selectAllMenu();

	/**
	 * 查询所有按钮资源
	 * 
	 * @return
	 */
	List<Resource> selectAllButton();

	/**
	 * 根据资源id硬删除该资源下的所有子资源,不包括该资源
	 * 
	 * @param id
	 * @return
	 */
	int deleteChildRecursion(Long id);

}